#ifndef APPLICATION_HPP
#define APPLICATION_HPP

#include <stdint.h>

#include "Pattern/Singleton.hpp"

#ifdef MY_USE_WIN32

    #include "Core/Win32/ApplicationImp.hpp"

#elif MY_USE_UNIX

    #include "Core/Unix/ApplicationImp.hpp"

#else

    #error No implementation defined for My::ApplicationImp.

#endif

namespace My
{
    class Application : public Singleton< Application >, private ApplicationImp
    {
        friend class Singleton< Application >;

    public:
        virtual int32_t Run();

    protected:
        Application();
        virtual ~Application();
    };

    inline Application::Application()
    {}

    inline Application::~Application()
    {}

    inline int32_t Application::Run()
    {
        return ApplicationImp::Run();
    }
}

#endif // APPLICATION_HPP
